﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;


namespace Sispe.UI
{
    public partial class FrmUsuario : Form
    {
        [Dependency]
        public IUsuarioBL usuarioBL { get; set; }

        [Dependency]
        public IUsuarioMenuBL usuMenuBL{get;set;}

        [Dependency]
        public IPersonaBL personaBL { get; set; }

        [Dependency]
        public ITrabajadorBL trabajadorBL { get; set; }

        public FrmUsuario()
        {
            InitializeComponent();
            this.BuildUp();
        }

        public USUARIO currentUsuarioMenuUsuario{get;set;}
        public USUARIO currentUsuarioUsuario { get; set; }

        private void FrmUsuario_Load(object sender, EventArgs e)
        {
            if (currentUsuarioUsuario != null)
            {
                menuLlena();
            }
            else
                cargaData();
        }

        public void menuLlena()
        {
            var datoUsuario = usuMenuBL.GetAllFromUsuarioByPersonaFromLogin(currentUsuarioUsuario.TRABAJADOR.PERSONA.Dni);

            var permiso = (from p in usuMenuBL.GetAllUsuarioMenu(datoUsuario.IdUsuario)
                           select p.MENU.Tag.ToString()).ToArray();

            System.Windows.Forms.Button[] botones = new System.Windows.Forms.Button[]{
            this.btnEliminar,this.btnEditar,this.btnNuevo};

            var noVisible = from nv in botones
                            where !permiso.Contains(nv.Tag.ToString())
                            select nv;

            noVisible.ToList().ForEach(nv => nv.Enabled = false);

            cargaData();
        }

        public void cargaData()
        {
            uSUARIOBindingSource.DataSource = usuarioBL.GetAllFromUsuario();
            //var usu = uSUARIO_MENUBindingSource.Current;
            //var trab = (from c in trabajadorBL.GetAllFromTrabajador()
            //            where c.Id.Equals(usu.IdTrabajador)
            //            select c).SingleOrDefault();
            //usu.TRABAJADOR = trab;
            //uSUARIO_MENUBindingSource.DataSource = usu;

        }

        private void uSUARIORadGridView_CurrentCellChanged(object sender, Telerik.WinControls.UI.CurrentCellChangedEventArgs e)
        {
            USUARIO currentUsuario = uSUARIOBindingSource.Current as USUARIO;
            if(currentUsuario!=null)
            {
                uSUARIO_MENUBindingSource.DataSource=usuMenuBL.GetAllFromDetalleMenuUsuarioByUsuarioId(currentUsuario.IdTrabajador);

            //    #region UndMedida
            //    try
            //    {
            //        //var currentUsuario = uSUARIOBindingSource.Current as USUARIO;
            //        for (int count = 0; count < uSUARIORadGridView.Rows.Count; count++)
            //        {
            //            if (currentUsuario != null)
            //            {
            //                TRABAJADOR a = uSUARIORadGridView.Rows[count].Cells[0].Value as TRABAJADOR;
            //                var und = (from c in personaBL.GetAllFromPersona()
            //                           where c.IdPersona.Equals(a.Id)
            //                           select c).SingleOrDefault();
            //                uSUARIORadGridView.Rows[count].Cells[1].Value = und.NombreCompleto.ToString();
            //            }
            //        }
            //    }
            //    catch (Exception)
            //    {
            //        MessageBox.Show("Error");
            //    }
                //#endregion
            }


        }

        private void txtDescripcion_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtDescripcion_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyCode==Keys.Enter)
            {
                if(rbtnPersona.Checked)
                {
                    uSUARIOBindingSource.DataSource=usuarioBL.GetFromUsuarioByTrabajador(txtDescripcion.Text);
                }
                if(rbtnRol.Checked)
                {
                    uSUARIOBindingSource.DataSource=usuarioBL.GetFromUsuarioByRol(txtDescripcion.Text);
                }
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            FrmMttoUsuario frm = new FrmMttoUsuario();
            frm.Nuevo();
            frm.ShowDialog();
            cargaData();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            var currentUsuario = uSUARIOBindingSource.Current as USUARIO;

            currentUsuario.TRABAJADOR.PERSONA = (from p in personaBL.GetAllFromPersona()
                                                 where p.IdPersona.Equals(currentUsuario.TRABAJADOR.Id)
                                                 select p).SingleOrDefault();
            if (currentUsuario != null)
            {
                FrmMttoUsuario frm = new FrmMttoUsuario();
                //frm._usuario = currentUsuario;
                frm.IdUsuario = currentUsuario.IdTrabajador;
                frm.Editar();
                frm.ShowDialog();
                cargaData();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un Usuario", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            var currentUsuario = uSUARIOBindingSource.Current as USUARIO;
            PERSONA per = (from p in personaBL.GetAllFromPersona()
                           where p.IdPersona.Equals(currentUsuario.IdTrabajador)
                           select p).SingleOrDefault();
            currentUsuario.TRABAJADOR.PERSONA = per;
            if (currentUsuario != null)
            {
                DialogResult rpta = MessageBox.Show("¿Desea eliminar el Usuario: " + currentUsuario.TRABAJADOR.PERSONA.Nombres + "?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (rpta == DialogResult.Yes)
                {
                    usuarioBL.DeleteUsuario(currentUsuario.Numero);
                    cargaData();
                }
            }
        }

        private void uSUARIORadGridView_Click(object sender, EventArgs e)
        {
            #region UndMedida
            //try
            //{
            //    var currentUsuario = uSUARIOBindingSource.Current as USUARIO;
            //    for (int count = 0; count < uSUARIORadGridView.Rows.Count; count++)
            //    {
            //        if (currentUsuario != null)
            //        {
            //            TRABAJADOR a = uSUARIORadGridView.Rows[count].Cells[0].Value as TRABAJADOR;
            //            var und = (from c in personaBL.GetAllFromPersona()
            //                       where c.IdPersona.Equals(a.Id)
            //                       select c).SingleOrDefault();
            //            uSUARIORadGridView.Rows[count].Cells[1].Value = und.NombreCompleto.ToString();
            //        }
            //    }
            //}
            //catch (Exception)
            //{
            //    MessageBox.Show("Error");
            //}
            #endregion
        }
    }
}
